其他
闲鱼如何在2个月内实现Android启动速度翻倍的?
建立标准
、 分析现状
、 抓大放小
三个步骤。common
、 interactive
两部分占去了大部分的时间,这是启动器在执行启动任务。而在进入首页后,页面的请求与view的排版占用了大部分的时间。启动任务优化
common
与 interactive
属于启动器执行任务的两个阶段,它们都会让主线程等待阶段中的任务全部执行完,所以这两个阶段的任务,我们叫它 阻塞型任务
。部分任务延迟执行
降低任务本身的耗时
拆分大任务
任务拆分与延迟执行
非阻塞任务的触发时机
危险的边缘
疯狂试探。queueIdle
回调之后触发。而它的执行占用了多过的系统资源,造成CPU占用、网络请求排队、IO密集等问题。最终导致主线程、渲染变慢的情况。queueIdle
回调,并启动一个延迟6s的runnable作为”备份“,防止message queue过忙长时间无法触发非阻塞阶段的任务。任务耗时治理
要快速治理,需要利用一些成熟的工具。可以先对任务中的每一行代码进行时间统计,筛选出执行时间较长的调用后,使用系统提供的 method trace
进行更细粒度的分析。
对于IO出来的值,尽量做内存缓存,避免多次IO
避免产生大的SharedPreference文件,尽可能将对commit的调用换成apply
注意一些异步接口回调的线程,如果是主线程,也需要保证回调后的代码快速执行完
首页启动优化
广告页
数据预加载
View预创建
总结与下一步优化
对启动时候的资源消耗进行整理,减少不必要的网络请求与IO以及线程切换。
对启动器中的线程负载进行优化,目前启动的任务分配方式距离理论上的最优值(平均值)大约还有50%的空间。
使用dex-relayout、PGO加速启动